package cc.core.view.jusfan;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 *
 */
public class Rc extends View {

 OnTouchingLetterChangedListener onTouchingLetterChangedListener;
 String[] b = {"↑","☆","A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
   "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
   "Y", "Z" };
 
 int choose = -1;
 Paint paint = new Paint();
 boolean showBkg = false;

 public Rc(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
 }

 public Rc(Context context, AttributeSet attrs) {
  super(context, attrs);
 }

 public Rc(Context context) {
  super(context);
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  if (showBkg) {
   canvas.drawColor(Color.parseColor("#40000000"));
  }

  int height = getHeight();
  int width = getWidth();
  int singleHeight = height / b.length;
  for (int i = 0; i < b.length; i++) {
   paint.setColor(Color.parseColor("#585858"));
   paint.setTypeface(Typeface.DEFAULT);
   paint.setAntiAlias(true);
   if (i == choose) {
    paint.setColor(Color.parseColor("#3399ff"));
//    paint.setFakeBoldText(true);
   }
   paint.setTextSize((int)(height/28/1.5));
   float xPos = width / 2 - paint.measureText(b[i]) / 2;
   float yPos = singleHeight * i + singleHeight;
   canvas.drawText(b[i], xPos, yPos, paint);
   paint.reset();
  }

 }

 @Override
 public boolean dispatchTouchEvent(MotionEvent event) {
  final int action = event.getAction();
  final float y = event.getY();
  final int oldChoose = choose;
  final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
  final int c = (int) (y / getHeight() * b.length);
  switch (action) {
  case MotionEvent.ACTION_DOWN:
   showBkg = true;
   if (oldChoose != c && listener != null) {
    if (c >=0 && c < b.length) { 
     listener.onTouchingLetterChanged(b[c]);
     choose = c;
     invalidate();
    }
   }
   break;
  case MotionEvent.ACTION_MOVE:
   if (oldChoose != c && listener != null) {
    if (c >=0 && c < b.length) {  
     listener.onTouchingLetterChanged(b[c]);
     choose = c;
     invalidate();
    }
   }
   break;
  case MotionEvent.ACTION_CANCEL://移出了界外
  case MotionEvent.ACTION_UP:
   showBkg = false;
   choose = -1;
   listener.onTouchUp();
   invalidate();
   break;
  }
  return true;
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  return super.onTouchEvent(event);
 }

 public void setOnTouchingLetterChangedListener(
   OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
   this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
 }

 public interface OnTouchingLetterChangedListener {
  void onTouchingLetterChanged(String s);
  void onTouchUp();
 }

}

